Skip to content

Github配置ssh key的步骤

✨文章摘要(AI生成)

本文详细介绍了在GitHub上配置SSH key的步骤和原理,旨在帮助用户简化向GitHub推送代码时的身份验证过程。通过配置SSH key,用户可以避免每次推送代码时都输入GitHub的账号和密码,从而提高工作效率。

通过本文的指导,用户可以轻松完成GitHub上SSH key的配置,享受更加便捷的代码推送体验。

前言

在github上配置ssh key很容易,网上一大堆教程,但基本没有详细解释其原理的,为什么要配?每使用一台主机都要配?配了为啥就不用密码了?下面将简单通俗地解释一下。

我们在往github上push项目的时候,如果走https的方式,每次都需要输入账号密码,非常麻烦。而采用ssh的方式,就不再需要输入,只需要在github自己账号下配置一个ssh key即可。

配置SSH

git使用SSH配置, 初始需要以下三个步骤

  1. 使用秘钥生成工具生成rsa秘钥和公钥
  2. 将rsa公钥添加到代码托管平台
  3. 将rsa秘钥添加到ssh-agent中,为ssh client指定使用的秘钥文件

具体操作如下:

第一步:检查是否已经存在ssh key

看是否存在 id_rsaid_rsa.pub 文件;如果存在,说明已经有SSH Key了,可直接跳到下一步

shell
cd ~/.ssh
ls

如下图所示,则表明已经存在,直接跳到第三步

第二步:生成ssh key

如果不存在ssh key,使用如下命令生成,执行后一直回车即可

shell
# 生成rsa秘钥和公钥, 邮箱为github注册的邮箱
ssh-keygen -t rsa -C "xxx@xxx.com"

生成完以后再用第一步命令,查看ssh key

第三步:获取ssh key公钥内容

shell
cat ~/.ssh/id_rsa.pub

如下图所示,复制该内容

第四步:Github账号上添加公钥

进入Settings设置页面,点击SSH and GPG keys,然后点击New SSH key,把刚才复制的内容粘贴上去保存即可

第五步:验证是否设置成功

shell
ssh -T git@github.com

如下图所示,则表明设置成功

设置成功后,即可不需要账号密码clone和push代码

注意

之后在clone仓库的时候要使用ssh的url,而不是https!

有可能会遇到验证不成功的情况,提示信息如下

bash
...
git@github.com: Permission denied (publickey).

如果你的id_rsa.pub, id_rsa是从其他地方拷贝来的,那么你需要设置文件夹及文件的权限

bash
# 设置目录权限
chmod 700 ~/.ssh

# 设置key的权限
chmod 600 ~/.ssh/id_rsa

验证原理

SSH登录安全性由非对称加密保证,产生密钥时,一次产生两个密钥,一个公钥,一个私钥,在git中一般命名为id_rsa.pub, id_rsa。

那么如何使用生成的一个私钥一个公钥进行验证呢?

  • 本地生成一个密钥对,其中公钥放到远程主机,私钥保存在本地
  • 当本地主机需要登录远程主机时,本地主机向远程主机发送一个登录请求,远程收到消息后,随机生成一个字符串并用公钥加密,发回给本地。本地拿到该字符串,用存放在本地的私钥进行解密,再次发送到远程,远程比对该解密后的字符串与源字符串是否等同,如果等同则认证成功。

通俗解释

重点来了:,比如我在某台主机上操作git和我的远程仓库,想要push时不输入账号密码,走ssh协议,就需要配置ssh key,放上去的key是当前主机的ssh公钥。那么如果我换了一台其他主机,想要实现无密登录,也就需要重新配置。

下面解释开头提出的问题

(1)为什么要配?

配了才能实现push代码的时候不需要反复输入自己的github账号密码,更方便

(2)每使用一台主机都要配?

是的,每使用一台新主机进行git远程操作,想要实现无密,都需要配置。并不是说每个账号配一次就够了,而是每一台主机都需要配。

(3)配了为啥就不用密码了?

因为配置的时候是把当前主机的公钥放到了你的github账号下,相当于当前主机和你的账号做了一个关联,你在这台主机上已经登录了你的账号,此时此刻github认为是该账号主人在操作这台主机,在配置ssh后就信任该主机了。所以下次在使用git的时候即使没有登录github,也能直接从本地push代码到远程了。当然这里不要混淆了,你不能随意push你的代码到任何仓库,你只能push到你自己的仓库或者其他你有权限的仓库!

Git初始化配置

要使用Git进行推送必须设置全局的用户名和邮箱,设置完成后对当前用户全局生效。

shell
git config --global user.name '用户名' 
git config --global user.email '邮箱'

总结

以上就是配置SSH的全部过程,简单易懂。

原文地址 https://blog.csdn.net/weixin_42310154/article/details/118340458